Skip to content

fix(parquet): keep DELTA_BYTE_ARRAY dedup for values larger than the page size limit - #10505

Open
adriangb wants to merge 1 commit into
apache:mainfrom
pydantic:fix-delta-byte-array-page-split-10489
Open

fix(parquet): keep DELTA_BYTE_ARRAY dedup for values larger than the page size limit#10505
adriangb wants to merge 1 commit into
apache:mainfrom
pydantic:fix-delta-byte-array-page-split-10489

Conversation

@adriangb

Copy link
Copy Markdown
Contributor

The cause is the page flush, not the mini-batch splitting

The issue attributes the regression to #9972's byte-budget sub-batching. It's actually the page flush; the sub-batching only exposes it.

should_add_data_page fires when estimated_data_page_size() >= data_page_size_limit. For DELTA_BYTE_ARRAY that estimate is the real encoded size, and the first value on a page is stored in full — so a single 8 MiB value against a 1 MiB limit puts the page over the limit by itself and triggers a flush. Flushing clears the encoder's previous, so the next value gets prefix_length = 0, and so on. The encoding degenerates to exactly PLAIN.

Before #9972 a 1024-row mini-batch meant the check simply didn't run until 1024 values had been written, so the dedup survived. That was an accident of write_batch_size, not a designed property — the same column at 2000 rows already lost the prefix at the 1024-value boundary.

This matters for choosing a fix: making the byte budget encoding-aware (suggestion 2 in the issue) does not fix the reported bug. However precise the budget, the first value alone still exceeds the limit and still triggers the flush.

The fix

Parquet requires at least one value per data page, so a value larger than the limit cannot be split out — the limit is unsatisfiable for it. Counting those bytes against the limit is what forces the pathological one-value-per-page cut.

Record that first value's encoded size in PageMetrics::page_size_floor and apply the limit to what follows it, i.e. the bytes that can still go on another page.

The exemption is gated on a new ColumnValueEncoder::compresses_against_previous_value (default false, true only for DELTA_BYTE_ARRAY in both the generic and arrow encoders). PLAIN and DELTA_LENGTH_BYTE_ARRAY cost the same wherever a value lands, so there is nothing to preserve by keeping values together and they keep their existing tighter one-value page bound. All three regression tests from #9972 pass unmodified.

Why not "don't split when the split cannot help"

Suggestion 1 in the issue restores the dedup, but by removing the bound that #9972 added, for exactly the workload it was added for. Measured with Some(1) => chunk_size in byte_budget_chunker.rs, 2048 rows × 128 KiB distinct values against a 64 KiB page limit — the same regime as a 10 MB value against the 1 MiB default, scaled to fit in RAM:

pages max page
59.1.0 2048 128 KiB
suggestion 1 2 128 MiB
this PR 1024 256 KiB

Page size under suggestion 1 is write_batch_size × value_size. At 1024 × 10 MB that is a 10 GB page, which is the failure #9972 fixed.

Results

The reporter's table, reproduced verbatim (10 identical 8 MiB values, raw input 80 MiB):

data_page_size_limit 58.4.0 59.1.0 this PR
default (1 MiB) 8.00 MiB 80.00 MiB 8.00 MiB
4 MiB 8.00 MiB 80.00 MiB 8.00 MiB
8 MiB 8.00 MiB 80.00 MiB 8.00 MiB
16 MiB 8.00 MiB 8.00 MiB 8.00 MiB

Values that merely share a long prefix behave the same. Values sharing no prefix are unaffected in file size and stay bounded at up to two values per page — the exempt one plus the one that trips the budget.

Tests

  • test_column_writer_delta_byte_array_dedups_large_shared_prefix_values — 16 identical 64 KiB values, 16 KiB page limit. Fails on main with 1 MiB across 16 pages (byte for byte what PLAIN produces); passes here at ~one value's worth.
  • test_column_writer_delta_byte_array_bounds_pages_without_shared_prefix — the same column with values differing from byte 0, asserting pages stay bounded by two values. Guards against fixing this by dropping the bound.
  • test_large_string_delta_byte_array_shared_prefix — the ArrowWriter path from the report, as an exact page-layout assertion.

Notes

A follow-up worth considering separately: the byte budget in count_within_budget_* still measures raw payload length, so DELTA_BYTE_ARRAY columns sub-batch more eagerly than the encoded size warrants. That is a throughput question rather than a correctness one, and it is not what caused this regression.

🤖 Generated with Claude Code

…page limit

A `BYTE_ARRAY` value larger than `data_page_size_limit` exceeds the limit on
its own, so the post-write `should_add_data_page` check cuts a page after
every single value. Parquet requires at least one value per data page, so
that value is unsplittable and the limit is simply unsatisfiable there.

For `DELTA_BYTE_ARRAY` this is destructive rather than merely wasteful: each
page boundary discards the encoder's previous value, so every value gets
`prefix_length = 0` and the encoding degenerates to exactly `PLAIN`. Columns
of large values that share long prefixes stop being deduplicated (apache#10489).

Exempt a page's mandatory first value from the byte limit when that value
alone already exceeds it, so the limit applies to what follows — the bytes we
can still place on another page. The exemption is gated on
`ColumnValueEncoder::compresses_against_previous_value`, so only
`DELTA_BYTE_ARRAY` opts in; `PLAIN` and `DELTA_LENGTH_BYTE_ARRAY` cost the
same wherever a value lands and keep their existing one-value page bound.

Pages therefore stay bounded by the value size rather than growing with
`write_batch_size`, preserving the fix from apache#9972.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions github-actions Bot added the parquet Changes to the parquet crate label Jul 31, 2026
@adriangb
adriangb marked this pull request as ready for review August 1, 2026 16:49
@adriangb

adriangb commented Aug 1, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark arrow_writer

@adriangb

adriangb commented Aug 1, 2026

Copy link
Copy Markdown
Contributor Author

run benchmark writer_overhead

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5152441889-1338-nk8cj 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing fix-delta-byte-array-page-split-10489 (d053bf0) to cd17899 (merge-base) diff

Run configuration
run benchmark arrow_writer

BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench arrow_writer
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark running (GKE) | trigger
Instance: c4a-highmem-16 (12 vCPU / 65 GiB) | Linux bench-c5152443029-1339-nd8ss 6.12.85+ #1 SMP Mon May 11 08:17:35 UTC 2026 aarch64 GNU/Linux

CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected

Comparing fix-delta-byte-array-page-split-10489 (d053bf0) to cd17899 (merge-base) diff

Run configuration
run benchmark writer_overhead

BENCH_COMMAND=cargo bench --features=arrow,async,test_common,experimental,object_store --bench writer_overhead
Results will be posted here when complete


File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing fix-delta-byte-array-page-split-10489 (d053bf0) to cd17899 (merge-base) diff

Run configuration
run benchmark writer_overhead
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                         fix-delta-byte-array-page-split-10489    main
-----                         -------------------------------------    ----
writer_overhead/10000_cols    1.00     38.3±0.67ms        ? ?/sec      1.00     38.4±0.45ms        ? ?/sec
writer_overhead/1000_cols     1.00      3.6±0.03ms        ? ?/sec      1.00      3.5±0.03ms        ? ?/sec
writer_overhead/5000_cols     1.00     18.3±0.22ms        ? ?/sec      1.12     20.5±0.24ms        ? ?/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 35.0s
Peak memory 55.8 MiB
Avg memory 31.7 MiB
CPU user 31.9s
CPU sys 1.1s
Peak spill 0 B

branch

Metric Value
Wall time 35.0s
Peak memory 55.8 MiB
Avg memory 32.5 MiB
CPU user 31.0s
CPU sys 0.0s
Peak spill 0 B

File an issue against this benchmark runner

@adriangbot

Copy link
Copy Markdown

🤖 Arrow criterion benchmark completed (GKE) | trigger

Instance: c4a-highmem-16 (12 vCPU / 65 GiB)

Comparing fix-delta-byte-array-page-split-10489 (d053bf0) to cd17899 (merge-base) diff

Run configuration
run benchmark arrow_writer
CPU Details (lscpu)
Architecture:                            aarch64
CPU op-mode(s):                          64-bit
Byte Order:                              Little Endian
CPU(s):                                  16
On-line CPU(s) list:                     0-15
Vendor ID:                               ARM
Model name:                              Neoverse-V2
Model:                                   1
Thread(s) per core:                      1
Core(s) per cluster:                     16
Socket(s):                               -
Cluster(s):                              1
Stepping:                                r0p1
BogoMIPS:                                2000.00
Flags:                                   fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 sm3 sm4 asimddp sha512 sve asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp sve2 sveaes svepmull svebitperm svesha3 svesm4 flagm2 frint svei8mm svebf16 i8mm bf16 dgh rng bti
L1d cache:                               1 MiB (16 instances)
L1i cache:                               1 MiB (16 instances)
L2 cache:                                32 MiB (16 instances)
L3 cache:                                80 MiB (1 instance)
NUMA node(s):                            1
NUMA node0 CPU(s):                       0-15
Vulnerability Gather data sampling:      Not affected
Vulnerability Indirect target selection: Not affected
Vulnerability Itlb multihit:             Not affected
Vulnerability L1tf:                      Not affected
Vulnerability Mds:                       Not affected
Vulnerability Meltdown:                  Not affected
Vulnerability Mmio stale data:           Not affected
Vulnerability Reg file data sampling:    Not affected
Vulnerability Retbleed:                  Not affected
Vulnerability Spec rstack overflow:      Not affected
Vulnerability Spec store bypass:         Mitigation; Speculative Store Bypass disabled via prctl
Vulnerability Spectre v1:                Mitigation; __user pointer sanitization
Vulnerability Spectre v2:                Mitigation; CSV2, BHB
Vulnerability Srbds:                     Not affected
Vulnerability Tsa:                       Not affected
Vulnerability Tsx async abort:           Not affected
Vulnerability Vmscape:                   Not affected
Details

group                                              fix-delta-byte-array-page-split-10489    main
-----                                              -------------------------------------    ----
bool/bloom_filter                                  1.02     13.3±0.10ms    18.8 MB/sec      1.00     13.0±0.05ms    19.2 MB/sec
bool/cdc                                           1.01     16.1±0.12ms    15.6 MB/sec      1.00     16.0±0.08ms    15.7 MB/sec
bool/default                                       1.02     11.1±0.08ms    22.5 MB/sec      1.00     10.9±0.04ms    22.9 MB/sec
bool/parquet_2                                     1.02     14.1±0.10ms    17.8 MB/sec      1.00     13.8±0.05ms    18.1 MB/sec
bool/zstd                                          1.01     11.6±0.09ms    21.5 MB/sec      1.00     11.5±0.04ms    21.8 MB/sec
bool/zstd_parquet_2                                1.02     14.5±0.09ms    17.2 MB/sec      1.00     14.3±0.09ms    17.5 MB/sec
bool_non_null/bloom_filter                         1.00      7.0±0.03ms    17.8 MB/sec      1.00      7.0±0.03ms    17.8 MB/sec
bool_non_null/cdc                                  1.00      6.9±0.06ms    18.1 MB/sec      1.01      7.0±0.05ms    17.9 MB/sec
bool_non_null/default                              1.00      4.2±0.03ms    29.7 MB/sec      1.01      4.2±0.03ms    29.4 MB/sec
bool_non_null/parquet_2                            1.00      8.0±0.03ms    15.6 MB/sec      1.00      8.1±0.03ms    15.5 MB/sec
bool_non_null/zstd                                 1.00      4.6±0.03ms    27.3 MB/sec      1.00      4.6±0.02ms    27.2 MB/sec
bool_non_null/zstd_parquet_2                       1.00      8.5±0.03ms    14.7 MB/sec      1.00      8.5±0.03ms    14.7 MB/sec
bool_ree/bloom_filter                              1.01     30.8±0.15ms     6.9 MB/sec      1.00     30.5±0.07ms     7.0 MB/sec
bool_ree/cdc                                       1.01     32.2±0.14ms     6.6 MB/sec      1.00     31.9±0.12ms     6.7 MB/sec
bool_ree/default                                   1.01     28.0±0.14ms     7.6 MB/sec      1.00     27.8±0.12ms     7.7 MB/sec
bool_ree/parquet_2                                 1.01     29.6±0.13ms     7.2 MB/sec      1.00     29.3±0.09ms     7.3 MB/sec
bool_ree/zstd                                      1.01     28.7±0.15ms     7.4 MB/sec      1.00     28.4±0.09ms     7.5 MB/sec
bool_ree/zstd_parquet_2                            1.01     29.9±0.15ms     7.1 MB/sec      1.00     29.6±0.07ms     7.2 MB/sec
decimal/bloom_filter                               1.02    154.9±2.10ms   387.3 MB/sec      1.00    152.6±1.29ms   393.1 MB/sec
decimal/cdc                                        1.00    134.6±0.77ms   445.9 MB/sec      1.00    134.0±0.87ms   447.8 MB/sec
decimal/default                                    1.00    110.6±1.25ms   542.5 MB/sec      1.00    110.5±1.04ms   543.1 MB/sec
decimal/parquet_2                                  1.00    279.3±2.50ms   214.8 MB/sec      1.03    287.6±6.15ms   208.6 MB/sec
decimal/zstd                                       1.00    123.5±1.63ms   485.8 MB/sec      1.00    123.0±1.01ms   488.0 MB/sec
decimal/zstd_parquet_2                             1.00    300.3±2.83ms   199.8 MB/sec      1.00    299.3±2.70ms   200.5 MB/sec
fixed_size_binary_ree/bloom_filter                 1.00     72.2±0.58ms    13.9 MB/sec      1.00     72.4±0.77ms    13.9 MB/sec
fixed_size_binary_ree/cdc                          1.01     73.9±0.40ms    13.6 MB/sec      1.00     73.0±0.28ms    13.8 MB/sec
fixed_size_binary_ree/default                      1.00     63.8±0.43ms    15.8 MB/sec      1.00     63.8±0.46ms    15.8 MB/sec
fixed_size_binary_ree/parquet_2                    1.00     87.2±1.56ms    11.6 MB/sec      1.01     88.0±1.80ms    11.4 MB/sec
fixed_size_binary_ree/zstd                         1.01     69.2±0.49ms    14.6 MB/sec      1.00     68.9±0.35ms    14.6 MB/sec
fixed_size_binary_ree/zstd_parquet_2               1.00     89.3±1.85ms    11.3 MB/sec      1.00     88.9±1.69ms    11.3 MB/sec
float_with_nans/bloom_filter                       1.01    100.0±2.28ms   140.1 MB/sec      1.00     98.5±1.71ms   142.2 MB/sec
float_with_nans/cdc                                1.01     85.8±0.84ms   163.3 MB/sec      1.00     84.6±0.84ms   165.5 MB/sec
float_with_nans/default                            1.01     77.5±0.96ms   180.6 MB/sec      1.00     77.1±0.81ms   181.5 MB/sec
float_with_nans/parquet_2                          1.00    100.6±1.02ms   139.1 MB/sec      1.01    101.4±1.23ms   138.1 MB/sec
float_with_nans/zstd                               1.00    115.5±0.85ms   121.3 MB/sec      1.00    115.6±0.86ms   121.1 MB/sec
float_with_nans/zstd_parquet_2                     1.00    139.5±1.77ms   100.4 MB/sec      1.00    140.0±1.48ms   100.0 MB/sec
fsb/bloom_filter                                   1.01     11.2±0.26ms  1438.6 MB/sec      1.00     11.1±0.22ms  1451.9 MB/sec
fsb/cdc                                            1.00     12.5±0.07ms  1288.2 MB/sec      1.01     12.6±0.09ms  1280.4 MB/sec
fsb/default                                        1.01      8.9±0.07ms  1802.5 MB/sec      1.00      8.9±0.10ms  1812.7 MB/sec
fsb/parquet_2                                      1.00     21.3±0.99ms   758.8 MB/sec      1.01     21.5±0.73ms   751.0 MB/sec
fsb/zstd                                           1.00     11.6±0.09ms  1394.9 MB/sec      1.01     11.6±0.06ms  1386.4 MB/sec
fsb/zstd_parquet_2                                 1.00     22.4±0.83ms   720.9 MB/sec      1.04     23.4±0.82ms   690.1 MB/sec
int32_ree/bloom_filter                             1.00     43.9±0.42ms     9.3 MB/sec      1.00     43.9±0.41ms     9.3 MB/sec
int32_ree/cdc                                      1.00     42.3±0.21ms     9.6 MB/sec      1.00     42.2±0.16ms     9.6 MB/sec
int32_ree/default                                  1.00     38.1±0.12ms    10.7 MB/sec      1.00     38.0±0.12ms    10.7 MB/sec
int32_ree/parquet_2                                1.00     38.1±0.17ms    10.7 MB/sec      1.00     38.0±0.12ms    10.7 MB/sec
int32_ree/zstd                                     1.00     38.8±0.19ms    10.5 MB/sec      1.00     38.6±0.11ms    10.5 MB/sec
int32_ree/zstd_parquet_2                           1.01     38.8±0.20ms    10.5 MB/sec      1.00     38.6±0.12ms    10.5 MB/sec
int32_ree_95pct_null/bloom_filter                  1.00     22.4±0.06ms    18.1 MB/sec      1.00     22.4±0.10ms    18.2 MB/sec
int32_ree_95pct_null/cdc                           1.00     24.6±0.07ms    16.6 MB/sec      1.01     24.9±0.50ms    16.4 MB/sec
int32_ree_95pct_null/default                       1.00     21.9±0.06ms    18.5 MB/sec      1.00     21.9±0.08ms    18.5 MB/sec
int32_ree_95pct_null/parquet_2                     1.00     21.9±0.06ms    18.6 MB/sec      1.00     21.9±0.06ms    18.6 MB/sec
int32_ree_95pct_null/zstd                          1.00     22.2±0.06ms    18.3 MB/sec      1.00     22.1±0.06ms    18.4 MB/sec
int32_ree_95pct_null/zstd_parquet_2                1.00     22.0±0.04ms    18.5 MB/sec      1.00     22.1±0.04ms    18.4 MB/sec
large_string_non_null/bloom_filter                 1.00     76.5±1.06ms     3.3 GB/sec      1.01     77.1±1.33ms     3.2 GB/sec
large_string_non_null/cdc                          1.00    249.9±1.92ms  1024.5 MB/sec      1.00    250.3±1.57ms  1022.8 MB/sec
large_string_non_null/default                      1.00     59.7±1.49ms     4.2 GB/sec      1.00     59.5±1.40ms     4.2 GB/sec
large_string_non_null/parquet_2                    1.00     59.7±1.34ms     4.2 GB/sec      1.00     59.4±1.28ms     4.2 GB/sec
large_string_non_null/zstd                         1.00     58.7±1.32ms     4.3 GB/sec      1.01     59.2±1.56ms     4.2 GB/sec
large_string_non_null/zstd_parquet_2               1.00     59.0±1.22ms     4.2 GB/sec      1.04     61.2±1.63ms     4.1 GB/sec
list_nested/bloom_filter                           1.02    157.7±4.95ms   183.0 MB/sec      1.00    155.0±1.28ms   186.2 MB/sec
list_nested/cdc                                    1.00    167.3±0.72ms   172.4 MB/sec      1.01    168.3±0.72ms   171.5 MB/sec
list_nested/default                                1.00    135.4±0.68ms   213.0 MB/sec      1.01    136.7±0.61ms   211.0 MB/sec
list_nested/parquet_2                              1.02    153.6±4.67ms   187.8 MB/sec      1.00    150.3±0.63ms   192.0 MB/sec
list_nested/zstd                                   1.03    149.7±4.58ms   192.7 MB/sec      1.00    145.8±0.64ms   197.9 MB/sec
list_nested/zstd_parquet_2                         1.02    167.3±4.64ms   172.5 MB/sec      1.00    163.3±0.72ms   176.7 MB/sec
list_primitive/bloom_filter                        1.00   327.8±11.15ms  1663.5 MB/sec      1.08   354.7±13.18ms  1537.4 MB/sec
list_primitive/cdc                                 1.00    319.8±3.76ms  1705.3 MB/sec      1.06   338.2±13.16ms  1612.4 MB/sec
list_primitive/default                             1.00    221.0±3.92ms     2.4 GB/sec      1.13    248.8±6.27ms     2.1 GB/sec
list_primitive/parquet_2                           1.00    227.5±1.38ms     2.3 GB/sec      1.16    264.1±6.40ms     2.0 GB/sec
list_primitive/zstd                                1.00    464.2±4.03ms  1174.8 MB/sec      1.08    500.1±8.41ms  1090.4 MB/sec
list_primitive/zstd_parquet_2                      1.00    456.9±3.15ms  1193.7 MB/sec      1.06    483.7±4.28ms  1127.6 MB/sec
list_primitive_non_null/bloom_filter               1.00   460.9±16.69ms  1180.9 MB/sec      1.07   491.8±28.65ms  1106.7 MB/sec
list_primitive_non_null/cdc                        1.03   419.0±13.65ms  1299.0 MB/sec      1.00   405.8±10.66ms  1341.3 MB/sec
list_primitive_non_null/default                    1.00    284.4±7.47ms  1913.9 MB/sec      1.09   310.1±16.34ms  1754.9 MB/sec
list_primitive_non_null/parquet_2                  1.06    306.3±3.53ms  1776.6 MB/sec      1.00   289.1±34.46ms  1882.2 MB/sec
list_primitive_non_null/zstd                       1.00   720.1±19.13ms   755.8 MB/sec      1.03   738.9±27.25ms   736.6 MB/sec
list_primitive_non_null/zstd_parquet_2             1.00   681.2±11.28ms   798.9 MB/sec      1.05   714.5±27.62ms   761.7 MB/sec
list_primitive_sparse_99pct_null/bloom_filter      1.00     13.6±0.14ms     2.7 GB/sec      1.00     13.6±0.12ms     2.7 GB/sec
list_primitive_sparse_99pct_null/cdc               1.00     25.1±0.20ms  1487.7 MB/sec      1.01     25.3±0.18ms  1476.8 MB/sec
list_primitive_sparse_99pct_null/default           1.02     13.1±0.11ms     2.8 GB/sec      1.00     12.9±0.09ms     2.8 GB/sec
list_primitive_sparse_99pct_null/parquet_2         1.01     13.0±0.09ms     2.8 GB/sec      1.00     12.9±0.10ms     2.8 GB/sec
list_primitive_sparse_99pct_null/zstd              1.01     15.1±0.13ms     2.4 GB/sec      1.00     14.9±0.17ms     2.4 GB/sec
list_primitive_sparse_99pct_null/zstd_parquet_2    1.01     13.3±0.09ms     2.7 GB/sec      1.00     13.2±0.14ms     2.8 GB/sec
list_struct_with_list/bloom_filter                 1.01    296.9±3.38ms   153.6 MB/sec      1.00    295.2±2.23ms   154.4 MB/sec
list_struct_with_list/cdc                          1.00    329.1±1.74ms   138.5 MB/sec      1.01    331.7±1.98ms   137.4 MB/sec
list_struct_with_list/default                      1.00    262.9±1.37ms   173.4 MB/sec      1.01    265.6±1.64ms   171.7 MB/sec
list_struct_with_list/parquet_2                    1.00    280.0±1.63ms   162.9 MB/sec      1.01    283.0±1.58ms   161.1 MB/sec
list_struct_with_list/zstd                         1.00    285.0±1.44ms   160.0 MB/sec      1.01    288.2±1.60ms   158.2 MB/sec
list_struct_with_list/zstd_parquet_2               1.00    304.7±1.95ms   149.6 MB/sec      1.01    307.8±2.40ms   148.1 MB/sec
primitive/bloom_filter                             1.00    162.0±3.42ms   277.1 MB/sec      1.01    163.6±3.27ms   274.4 MB/sec
primitive/cdc                                      1.00    165.9±1.55ms   270.6 MB/sec      1.00    165.8±1.69ms   270.7 MB/sec
primitive/default                                  1.00    124.3±1.24ms   361.1 MB/sec      1.00    123.9±1.42ms   362.1 MB/sec
primitive/parquet_2                                1.01    138.9±1.13ms   323.1 MB/sec      1.00    137.9±0.80ms   325.3 MB/sec
primitive/zstd                                     1.01    155.4±1.89ms   288.8 MB/sec      1.00    153.8±1.55ms   291.8 MB/sec
primitive/zstd_parquet_2                           1.00    173.1±1.40ms   259.3 MB/sec      1.00    172.3±1.28ms   260.5 MB/sec
primitive_all_null/bloom_filter                    1.00   961.6±20.72µs    45.6 GB/sec      1.00   962.8±16.69µs    45.5 GB/sec
primitive_all_null/cdc                             1.02     19.1±0.35ms     2.3 GB/sec      1.00     18.8±0.31ms     2.3 GB/sec
primitive_all_null/default                         1.00    271.7±1.81µs   161.3 GB/sec      1.01    274.5±2.38µs   159.6 GB/sec
primitive_all_null/parquet_2                       1.00    281.0±2.00µs   156.0 GB/sec      1.00    281.7±2.06µs   155.5 GB/sec
primitive_all_null/zstd                            1.00    390.1±2.15µs   112.3 GB/sec      1.01    393.4±1.65µs   111.4 GB/sec
primitive_all_null/zstd_parquet_2                  1.00    361.7±2.06µs   121.2 GB/sec      1.00    361.3±1.60µs   121.3 GB/sec
primitive_non_null/bloom_filter                    1.00    114.6±2.67ms   384.1 MB/sec      1.04    118.6±1.67ms   370.9 MB/sec
primitive_non_null/cdc                             1.00     95.1±1.29ms   462.6 MB/sec      1.00     94.7±1.16ms   464.8 MB/sec
primitive_non_null/default                         1.00     72.6±1.11ms   605.7 MB/sec      1.00     72.9±1.10ms   603.9 MB/sec
primitive_non_null/parquet_2                       1.00     93.9±1.29ms   468.6 MB/sec      1.00     94.0±0.92ms   468.1 MB/sec
primitive_non_null/zstd                            1.00    102.5±1.07ms   429.3 MB/sec      1.01    103.9±1.36ms   423.6 MB/sec
primitive_non_null/zstd_parquet_2                  1.00    127.6±1.46ms   344.8 MB/sec      1.00    128.2±1.17ms   343.3 MB/sec
primitive_sparse_99pct_null/bloom_filter           1.00     13.8±0.16ms     3.2 GB/sec      1.01     14.0±0.24ms     3.1 GB/sec
primitive_sparse_99pct_null/cdc                    1.00     32.1±0.45ms  1400.0 MB/sec      1.02     32.6±0.47ms  1377.2 MB/sec
primitive_sparse_99pct_null/default                1.01     11.7±0.16ms     3.8 GB/sec      1.00     11.6±0.14ms     3.8 GB/sec
primitive_sparse_99pct_null/parquet_2              1.02     11.7±0.10ms     3.8 GB/sec      1.00     11.5±0.09ms     3.8 GB/sec
primitive_sparse_99pct_null/zstd                   1.01     15.3±0.15ms     2.9 GB/sec      1.00     15.1±0.15ms     2.9 GB/sec
primitive_sparse_99pct_null/zstd_parquet_2         1.00     13.6±0.09ms     3.2 GB/sec      1.00     13.6±0.15ms     3.2 GB/sec
short_string_non_null/bloom_filter                 1.01     30.2±0.80ms   397.8 MB/sec      1.00     29.8±0.47ms   402.9 MB/sec
short_string_non_null/cdc                          1.00     20.2±0.15ms   593.6 MB/sec      1.01     20.4±0.12ms   588.4 MB/sec
short_string_non_null/default                      1.00     16.2±0.06ms   742.8 MB/sec      1.00     16.2±0.11ms   743.0 MB/sec
short_string_non_null/parquet_2                    1.00     26.2±0.16ms   457.9 MB/sec      1.00     26.1±0.12ms   459.8 MB/sec
short_string_non_null/zstd                         1.00     35.9±0.16ms   334.0 MB/sec      1.00     36.1±0.20ms   332.8 MB/sec
short_string_non_null/zstd_parquet_2               1.00     29.0±0.09ms   413.9 MB/sec      1.01     29.2±0.15ms   410.9 MB/sec
string/bloom_filter                                1.00   235.6±20.19ms     2.2 GB/sec      1.12   263.2±24.44ms  1991.7 MB/sec
string/cdc                                         1.00    219.0±7.30ms     2.3 GB/sec      1.01    220.3±9.87ms     2.3 GB/sec
string/default                                     1.00   131.5±21.65ms     3.9 GB/sec      1.13   149.1±25.37ms     3.4 GB/sec
string/parquet_2                                   1.67    193.1±2.75ms     2.7 GB/sec      1.00   115.9±19.51ms     4.4 GB/sec
string/zstd                                        1.09   471.4±23.79ms  1112.0 MB/sec      1.00    432.8±6.08ms  1211.2 MB/sec
string/zstd_parquet_2                              1.03   409.0±14.85ms  1281.7 MB/sec      1.00    397.0±2.76ms  1320.5 MB/sec
string_and_binary_view/bloom_filter                1.00     72.4±1.71ms   445.5 MB/sec      1.03     74.3±2.56ms   434.3 MB/sec
string_and_binary_view/cdc                         1.00     62.7±1.84ms   514.0 MB/sec      1.00     62.7±1.18ms   514.0 MB/sec
string_and_binary_view/default                     1.00     52.3±1.41ms   616.8 MB/sec      1.00     52.1±1.24ms   618.6 MB/sec
string_and_binary_view/parquet_2                   1.02     63.9±1.66ms   504.8 MB/sec      1.00     62.6±1.50ms   515.0 MB/sec
string_and_binary_view/zstd                        1.00     88.4±1.47ms   364.6 MB/sec      1.02     90.3±1.45ms   357.2 MB/sec
string_and_binary_view/zstd_parquet_2              1.03     78.7±1.77ms   409.7 MB/sec      1.00     76.7±1.16ms   420.3 MB/sec
string_dictionary/bloom_filter                     1.04    108.6±7.83ms     2.4 GB/sec      1.00    104.8±5.28ms     2.5 GB/sec
string_dictionary/cdc                              1.00     53.2±1.24ms     4.9 GB/sec      1.26     66.9±9.47ms     3.9 GB/sec
string_dictionary/default                          1.05     50.7±1.43ms     5.1 GB/sec      1.00     48.3±2.69ms     5.3 GB/sec
string_dictionary/parquet_2                        1.00     50.1±0.75ms     5.2 GB/sec      1.07     53.5±4.20ms     4.8 GB/sec
string_dictionary/zstd                             1.00    216.8±3.12ms  1218.5 MB/sec      1.06    228.8±4.09ms  1154.3 MB/sec
string_dictionary/zstd_parquet_2                   1.00    199.4±1.97ms  1324.8 MB/sec      1.01    200.9±1.69ms  1314.5 MB/sec
string_non_null/bloom_filter                       1.00   296.8±23.71ms  1765.5 MB/sec      1.03   306.1±39.49ms  1711.7 MB/sec
string_non_null/cdc                                1.00   267.2±13.59ms  1960.9 MB/sec      1.05   279.8±11.75ms  1873.1 MB/sec
string_non_null/default                            1.00   147.6±13.23ms     3.5 GB/sec      1.02   150.2±33.08ms     3.4 GB/sec
string_non_null/parquet_2                          1.00    111.4±1.84ms     4.6 GB/sec      1.25    138.8±7.50ms     3.7 GB/sec
string_non_null/zstd                               1.00    541.9±9.62ms   967.0 MB/sec      1.09   591.7±23.82ms   885.5 MB/sec
string_non_null/zstd_parquet_2                     1.00    506.2±7.73ms  1035.1 MB/sec      1.00    508.1±9.31ms  1031.3 MB/sec
string_ree/bloom_filter                            1.00    168.7±3.10ms    97.2 MB/sec      1.15    193.6±4.31ms    84.7 MB/sec
string_ree/cdc                                     1.00    233.6±2.25ms    70.2 MB/sec      1.08    251.9±6.73ms    65.1 MB/sec
string_ree/default                                 1.00    135.5±1.86ms   121.0 MB/sec      1.19    161.5±3.23ms   101.6 MB/sec
string_ree/parquet_2                               1.00    183.8±1.68ms    89.3 MB/sec      1.06    195.0±1.95ms    84.1 MB/sec
string_ree/zstd                                    1.00    192.4±4.12ms    85.3 MB/sec      1.06    203.4±4.41ms    80.6 MB/sec
string_ree/zstd_parquet_2                          1.00    197.2±2.35ms    83.2 MB/sec      1.07    210.3±1.98ms    78.0 MB/sec
string_ree_95pct_null/bloom_filter                 1.00     27.2±0.11ms    51.7 MB/sec      1.00     27.2±0.17ms    51.6 MB/sec
string_ree_95pct_null/cdc                          1.00     33.7±0.16ms    41.8 MB/sec      1.00     33.6±0.15ms    41.8 MB/sec
string_ree_95pct_null/default                      1.00     25.6±0.14ms    55.0 MB/sec      1.00     25.5±0.13ms    55.1 MB/sec
string_ree_95pct_null/parquet_2                    1.00     25.5±0.12ms    55.2 MB/sec      1.00     25.5±0.20ms    55.1 MB/sec
string_ree_95pct_null/zstd                         1.00     26.4±0.14ms    53.3 MB/sec      1.00     26.5±0.18ms    53.1 MB/sec
string_ree_95pct_null/zstd_parquet_2               1.01     26.5±0.19ms    53.1 MB/sec      1.00     26.3±0.15ms    53.6 MB/sec
struct_all_null/bloom_filter                       1.01    382.1±4.84µs    41.2 GB/sec      1.00    378.6±3.12µs    41.6 GB/sec
struct_all_null/cdc                                1.03      7.8±0.11ms     2.0 GB/sec      1.00      7.6±0.08ms     2.1 GB/sec
struct_all_null/default                            1.00    117.3±0.87µs   134.3 GB/sec      1.00    117.0±0.85µs   134.6 GB/sec
struct_all_null/parquet_2                          1.00    120.9±0.75µs   130.2 GB/sec      1.00    120.6±0.71µs   130.6 GB/sec
struct_all_null/zstd                               1.01    168.1±0.91µs    93.7 GB/sec      1.00    166.9±0.87µs    94.4 GB/sec
struct_all_null/zstd_parquet_2                     1.01    155.5±0.95µs   101.2 GB/sec      1.00    154.1±0.64µs   102.2 GB/sec
struct_non_null/bloom_filter                       1.00     49.5±0.66ms   323.5 MB/sec      1.04     51.3±1.60ms   312.1 MB/sec
struct_non_null/cdc                                1.00     47.2±0.46ms   338.9 MB/sec      1.02     48.0±0.59ms   333.5 MB/sec
struct_non_null/default                            1.02     34.2±0.70ms   467.8 MB/sec      1.00     33.7±0.36ms   475.0 MB/sec
struct_non_null/parquet_2                          1.00     42.7±0.46ms   374.8 MB/sec      1.01     42.9±0.58ms   372.6 MB/sec
struct_non_null/zstd                               1.00     42.5±0.55ms   376.2 MB/sec      1.02     43.3±0.64ms   369.9 MB/sec
struct_non_null/zstd_parquet_2                     1.00     57.0±0.96ms   280.8 MB/sec      1.01     57.4±0.73ms   278.6 MB/sec
struct_sparse_99pct_null/bloom_filter              1.00      7.2±0.08ms     2.2 GB/sec      1.01      7.3±0.11ms     2.2 GB/sec
struct_sparse_99pct_null/cdc                       1.00     14.9±0.18ms  1085.1 MB/sec      1.02     15.2±0.13ms  1062.0 MB/sec
struct_sparse_99pct_null/default                   1.00      6.4±0.06ms     2.5 GB/sec      1.00      6.4±0.07ms     2.4 GB/sec
struct_sparse_99pct_null/parquet_2                 1.00      6.5±0.06ms     2.4 GB/sec      1.00      6.5±0.08ms     2.4 GB/sec
struct_sparse_99pct_null/zstd                      1.00      7.8±0.06ms     2.0 GB/sec      1.01      7.9±0.08ms  2043.6 MB/sec
struct_sparse_99pct_null/zstd_parquet_2            1.00      7.3±0.11ms     2.2 GB/sec      1.00      7.2±0.08ms     2.2 GB/sec

Resource Usage

base (merge-base)

Metric Value
Wall time 3125.7s
Peak memory 2.8 GiB
Avg memory 2.6 GiB
CPU user 2962.4s
CPU sys 158.1s
Peak spill 0 B

branch

Metric Value
Wall time 3085.7s
Peak memory 2.8 GiB
Avg memory 2.6 GiB
CPU user 2968.6s
CPU sys 113.0s
Peak spill 0 B

File an issue against this benchmark runner

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

parquet Changes to the parquet crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

DELTA_BYTE_ARRAY stops deduplicating in parquet 59 for values larger than the page size limit

2 participants